package com.laolang.pluto.module.generator.web;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.laolang.pluto.common.annotation.Log;
import com.laolang.pluto.common.consts.BusinessType;
import com.laolang.pluto.common.core.domain.common.Page;
import com.laolang.pluto.common.core.domain.common.R;
import com.laolang.pluto.common.web.BaseController;
import com.laolang.pluto.module.generator.logic.GenLogic;
import com.laolang.pluto.module.generator.pojo.dto.GenTableUpdateBaseInfoDto;
import com.laolang.pluto.module.generator.pojo.dto.GenTableUpdateColumnInfoDto;
import com.laolang.pluto.module.generator.pojo.dto.GenTableUpdateGenInfoDto;
import com.laolang.pluto.module.generator.pojo.dto.TableInfoDto;
import com.laolang.pluto.module.generator.pojo.dto.TableListDto;
import com.laolang.pluto.module.generator.pojo.po.TableInfoPo;
import com.laolang.pluto.module.generator.pojo.vo.GenTableDetailVo;
import com.laolang.pluto.module.generator.pojo.vo.GenTableVo;

import lombok.RequiredArgsConstructor;

/**
 * @author laolang
 * @date 2021-08-01 16:27
 */
@RequiredArgsConstructor
@RequestMapping("/tool/gen")
@RestController
public class GeneratorController extends BaseController {

    private final GenLogic genLogic;

    /**
     * 查询数据库中所有的表
     */
    @GetMapping("tableInfoList")
    public R<Page<TableInfoPo>> tableInfoList(@RequestBody TableInfoDto dto) {
        return R.ok(genLogic.tableInfoList(dto));
    }

    /**
     * 已导入的代码生成列表
     */
    @Log(businessType = BusinessType.QUERY)
    //@PreAuthorize("@ss.hasPermi('gen:table:list')")
    @GetMapping("table/list")
    public R<Page<GenTableVo>> tableImportedList(@RequestBody TableListDto dto) {
        Page<GenTableVo> page = genLogic.tableList(dto);
        return R.ok(page);
    }

    /**
     * 代码生成详情
     */
    @Log(businessType = BusinessType.QUERY)
    @GetMapping("table/detail/{id}")
    public R<GenTableDetailVo> genTableDetail(@PathVariable Long id) {
        return R.ok(genLogic.genTableDetail(id));
    }

    /**
     * 添加一条记录到代码生成列表
     *
     * @param tableName 表名称
     */
    @PostMapping("table/add/{tableName}")
    public R<Boolean> addGenTable(@PathVariable String tableName) {
        return R.ok(genLogic.addGenTable(tableName));
    }

    /**
     * 更新代码生成基本信息
     */
    @PostMapping("table/update/baseinfo")
    public R<Boolean> updateGenTableBaseInfo(@RequestBody GenTableUpdateBaseInfoDto dto) {
        return R.ok(genLogic.updateGenTableBaseInfo(dto));
    }

    /**
     * 更新代码生成字段信息
     */
    @PostMapping("table/update/column")
    public R<Boolean> updateGenTableColumn(@RequestBody GenTableUpdateColumnInfoDto dto) {
        return R.ok(genLogic.updateGenTableColumn(dto));
    }

    /**
     * 更新代码生成生成信息
     */
    @PostMapping("table/update/geninfo")
    public R<Boolean> updateGenTableGenInfo(@RequestBody GenTableUpdateGenInfoDto dto) {
        return R.ok(genLogic.updateGenTableGenInfo(dto));
    }

    /**
     * 删除一个代码生成列表
     */
    @PostMapping("table/remove/{id}")
    public R<Boolean> removeGenTable(@PathVariable Long id) {
        return R.ok(genLogic.removeGenTable(id));
    }

    @GetMapping("code/{id}")
    public R<Boolean> genCode(@PathVariable Long id) {
        return R.ok(genLogic.genCode(id));
    }
}
